#!/usr/bin/qdroid
#codepage=Utf-8;

// test programm to check stdin-out communications
/*:: Скрипт тестирования класса ChildProcess 
(и объекта StdStreamsGate в дочернем процессе)

программа запускает другой скрипт как дочерний процесс 
и пытается обмениваться с ним данными
через стандартные потоки ввода/вывода
*/

//======== var section ===========================
res0=loadlib_qd("qdlib_bytearray");
res0=loadlib_qd("qdlib_childprocess");//возможность создания дочерних процессов

//-----------------------------------------------
function main()
{

	var obj_n=new ChildProcess(); 

        obj_n.start("qdroid stdin-out_tst2.client.qs");

        if (!obj_n.waitForStarted(1000))
                return "FAILED!";

//фаза инициации: стандартные сообщения...
        var compressed=new ByteArray;
        while (obj_n.waitForReadyRead(1000)) //по умолчанию, если не указано значение = 10 сек.
          {
                ba1=obj_n.readAll();
                print ("Parent:(data readed from child)[0]:("+ba1.size()+" bytes)"+ba1.toLatin1String()+"");
          };

// проверяем что возможен линамический обмен данными
// мы послали строку - должны получить ответ... - и так 2 раза

//print ("(Parent): [0023]");
	var message1="test str1";
	print ("Parent: [1] writing to child`s stdin:"+message1);
        obj_n.write((new ByteArray).append(message1));

        var compressed=new ByteArray;
        while (obj_n.waitForReadyRead(1000)) //по умолчанию, если не указано значение = 10 сек.
          {
                ba1=obj_n.readAll();
                print ("Parent:[.2.](data readed from child): ("+ba1.size()+" bytes) ["+ba1.toLatin1String()+"]");
                compressed.append_ba(ba1);
          };
	ba1=obj_n.readAll();
	compressed.append_ba(ba1);

        print ("Parent:[1](all recived data):"+compressed.toLatin1String());

//print ("(S):[0036]");
	var message2="test str2";
	print ("Parent: [2] writing to child`s stdin:"+message2);
	obj_n.write((new ByteArray).append(message2));

        var compressed2=new ByteArray;
        while (obj_n.waitForReadyRead(1000)) //по умолчанию, если не указано значение = 10 сек.
          {
                ba1=obj_n.readAll();
                print ("Parent:[.2.](data readed from child): ("+ba1.size()+" bytes) ["+ba1.toLatin1String()+"]");
                compressed2.append_ba(ba1);
          };
	ba1=obj_n.readAll();
	compressed.append_ba(ba1);

        print ("Parent:[2](all recived data):"+compressed2.toLatin1String());

        //print ("(S):"+compressed.toLatin1String());



//      кусок для ожидания программ которые сами должны завершиться
//        if (obj_n.state()==2)
//          if (!obj_n.waitForFinished())
             return obj_n.errorString();
/**/
	obj_n.close(); //закроем дочернюю программу
        return "ok";

  

}//main()

//=========================================================================
main();
exit();